<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <!-- 引入vue -->
  <script type="text/javascript" src="../js/vue.js"></script>
</head>

<body>
  <!-- 
  深度监视：
  1.vue中的watch默认不监测对象内部值的改变（一层）
  2.配置deep:true可以检测对象内部值的改变（多层）
  备注：
  1.vue自身可以检测对象内部值的改变，但vue提供的watch默认不可以！！！
  2.使用watch时根据数据的具体结构，决定是否采用深度监视
 -->
  <div id="root">
    <h2>今天天气{{info}}</h2>
    <button @click="changeWea">切换天气</button>
    <h3>a:{{numbers.a}}</h3>
    <button @click="numbers.a++">点击让a+1</button>
    <h3>b:{{numbers.b}}</h3>
    <button @click="numbers.b++">点击让b+1</button>
    <button @click="numbers={a:666,b:888}">彻底替换掉Numbers</button>
    {{numbers.c.d.e}}
  </div>
  <script type="text/javascript">
    Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。、
    const vm = new Vue({
      el: '#root',
      data: {
        isHot: true,
        numbers: {
          a: 1,
          b: 2,
          c: {
            d: {
              e: 100
            }
          }
        }
      },
      computed: {
        info() {
          return this.isHot ? '炎热' : '凉爽'
        }
      },
      methods: {
        changeWea() {
          this.isHot = !this.isHot
        }
      },
      watch: {
        isHot: {
          handler(newValue, oldValue) {
            console.log('ishot已修改', newValue, oldValue);
          }
        },
        // 监视多级结构中某个属性的变化
        'numbers.a': {
          handler() {
            console.log('a已改变')
          }
        },
        'numbers.b': {
          handler() {
            console.log('b已改变')
          }
        },
        // 监视多级结构中多个属性的变化
        numbers: {
          deep: true,
          handler() {
            console.log('nums已改变')
          }
        }
      }
    })

  </script>
</body>

</html>